#ifndef __GVJ_HEADER
#define __GVJ_HEADER

#include <unistd.h>
#include <fcntl.h>

#include <algorithm>
#include <string>
#include <utility>
#include <vector>
#include <cstdio>
#include <cstring>

#include <sys/prctl.h>
#include <time.h>

#include <python2.7/Python.h>

typedef std::pair<std::string, std::string> PSS;


// 获取当前时间：yy-mm-dd hh-mm-ss
std::string data_time();
	
// 接受一个vector: {(name1, value1), (name2, value2), (name3, value3)}
// 编码为string：name1=value1&name2=value2&name3=value3
std::string args_encode(std::vector<PSS> &data); 
	
// 编码函数
std::string url_encode(const char *str);
	
// 为提交的源码添加头部注释，包括提示信息，提交时间
std::string add_comment();
	
// itoa的string版本，可重入
std::string itoa_string(int x);
	
std::string get_cookie_path(const char *dir, const char *oj, int id);
	
std::string random_str(int length);
	
// 代理进程的入口处调用，设置好与监听进程之间的管道
//int set_pipe(int *listen_to_proxy, int *proxy_to_listen, int *in_pipe, int *out_pipe);

// 通过prctl设置进程的新名称
int set_process_name(const char *new_name);

std::string test_create_stream_to_proxy(const char *oj_name);

int init_python();

void finalize_python();

bool is_positive_integer(const char *str);

char *strlower(char *str);

char *strupper(char *str);

int set_non_blocking(int fd);

#endif // __GVJ_HEADER
